<?php
/*
 * @Author: SunnyJ
 * @Date: 2021-05-04 14:18:10
 * @LastEditors: SunnyJ
 * @LastEditTime: 2021-06-02 11:50:50
 */

namespace app\api\controller;
use think\Db;
use app\service\GoodsService;
use app\api\controller\Auth2;

class Product extends Base2 {
    /**
     * @description: 获取品目池接口
     * @param { 授权接口获取的access token } $token
     * @param { 平台code标识 } $platformCode
     * @return { 商品分类name与id } $result
     */
    public function get_pools($token,$platformCode) {
        // 验证token与platformCode
        $auth = Auth2::check_token($token,$platformCode);
        if (!$auth['result']) {
            return $this -> create('', $auth['msg'], false);
        }
        $result = Db::name('GoodsCategory')->field('name,id')->order('sort asc')->select();
        return $this -> create($result,'数据请求成功');
    }

    /**
     * @description: 获取商品编号SKU接口
     * @param { 授权接口获取的access token } $token
     * @param { 池子编号 } $catalog_id
     * @param { 平台code标识 } $platformCode
     * @return { 商品编号数组 } $result
     */
    public function skus($token,$catalog_id,$platformCode) {
        // 验证token与platformCode
        $auth = Auth2::check_token($token,$platformCode);
        if (!$auth['result']) {
            return $this -> create('', $auth['msg'], false);
        }
        $result = array();
        $res = Db::name('goods_category_join')->where('category_id',$catalog_id)->column('goods_id');
        foreach ($res as &$v) {
            $result = array_merge($result , Db::name('goods_spec_base')->where('goods_id',intval($v))->column('id'));
        }
        return $this -> create($result,'数据请求成功');
    }

    /**
     * @description: 商品详情接口
     * @param { 授权接口获取的access token } $token
     * @param { 商品编号，只支持单个查询 } $sku
     * @param { 获取除基本商品信息外的其他商品信息。
     * 如传：“example_sku,example_emall”则除基本信息，同时返回“标杆供应商商品sku，标杆供应商”。
     * 当不传，或者传“”时，表示不需要额外的参数信息 } $product_extend_attributes
     * @param { 平台code标识 } $platformCode
     * @return { 详见代码段 } $result
     */
    public function detail($token,$sku,$product_extend_attributes = '',$platformCode) {
        // return $this -> create("接口调用成功,token = $token,sku = $sku, product = $product_extend_attributes, platformCode = $platformCode");
        // 验证token与platformCode
        $auth = Auth2::check_token($token,$platformCode);
        if (!$auth['result']) {
            return $this -> create('', $auth['msg'], false);
        }
        // 获取商品
        $spec_data = Db::name('goods_spec_base')->where('id',intval($sku))->find();
        if (empty($spec_data)) {
            return $this -> create('','商品不存在或已删除', false);
        }
        $goods_id = intval($spec_data['goods_id']);
        $params = [
            'where' => [
                'id' => $goods_id,
                'is_delete_time' => 0,
            ],
            'is_photo' => true,
            'is_spec' => true,
            'is_content_app' => false,
        ];
        $res = GoodsService::GoodsList($params);
        $data = $res['data'];
        if(empty($data[0]) || $data[0]['is_delete_time'] != 0)
        {
            return $this -> create('','商品不存在或已删除', false);
        } else {
            $data = $data[0];
        }
        // 测试data用，部署时注释掉
        // return $this -> create($data,'数据请求成功');

        // 提取数据
        // sku
        $result = array('sku' => $sku);
        // url
        $result['url'] = isset($data['goods_url']) ? $data['goods_url'] : '';
        // model 型号
        $model = Db::name('goods')->where('id',$goods_id)->value('model');
        $result['model'] = isset($model) ? $model : '';
        // weight 重量
        $result['weight'] = isset($spec_data['weight']) ? $spec_data['weight'] : '';
        // image_path 主图地址
        $result['image_path'] = isset($data['home_recommended_images']) ? $data['home_recommended_images'] : '';
        // state 上下架状态
        $result['state'] = isset($data['is_shelves']) ? $data['is_shelves'] : '';
        // brand_name
        $result['brand_name'] = isset($data['brand_name']) ? $data['brand_name'] : '';
        // name
        $result['name'] = isset($data['title']) ? $data['title'] : '';
        // product_area 产地 (可以返回id也可以返回name，此处返回的的是id。此处API文档不清楚，需要后续调试)
        $result['product_area'] = isset($data['place_origin']) ? $data['place_origin'] : '';
        // upc 条形码
        $result['upc'] = isset($spec_data['barcode']) ? $spec_data['barcode'] : '';
        // unit 销售单位
        $result['unit'] = isset($data['inventory_unit']) ? $data['inventory_unit'] : '';
        // category 类别 
        $category = Db::name('goods_category_join')->where('goods_id',$goods_id)->column('category_id');
        $result['category'] = isset($category) ? $category : '';
        // service 售后服务
        $result['service'] = isset($data['service']) ? $data['service'] : '默认售后';
        // code_69 69码 (百度上说就是条形码，所以之前返回upc是干嘛的？)
        $result['code_69'] = isset($data['code_69']) ? $data['code_69'] : '';
        // attributes (根据文档看应该是用来返回自定义参数值的，但是文档写的是真烂啊，目前暂时用不到的功能)
        $result['attributes'] = isset($data['attributes']) ? $data['attributes'] : '';
        // introduction 详细介绍
        $result['introduction'] = isset($data['content_web']) ? $data['content_web'] : '详细介绍';
        // param 规格参数
        $result['param'] = isset($data['param']) ? $data['param'] : '';
        // ware 包装清单
        $result['ware'] = isset($data['ware']) ? $data['ware'] : '见产品描述';
        // sale_actives (int) 是否是促销商品，数值类型，“0-不是促销产品， 1-是促销产品”
        $price_container = $data['price_container'];
        $result['sale_actives'] = $price_container['price'] < $price_container['original_price'] ? 1 : 0;

        // 返回数据
        return $this -> create($result,'数据请求成功');
    }

    /**
     * @description: 上下架状态接口
     * @param { 授权接口获取的access token } $token
     * @param { 商品编号，支持批量查询，以，分隔。 1为上架，0为下架 } $sku
     * @param { 平台code标识 } $platformCode
     * @return {*} $result
     */
    public function shelf_states($token,$sku,$platformCode) {
        // 验证token与platformCode
        $auth = Auth2::check_token($token,$platformCode);
        if (!$auth['result']) {
            return $this -> create('', $auth['msg'], false);
        }
        $result = array();
        // 按','分割字符串
        if (!is_array($sku)) {
            $sku = explode(',',$sku);
        }
        foreach ($sku as &$s) {
            $goods_id = Db::name('goods_spec_base')->where('id',$s)->value('goods_id');
            $is_shelves = Db::name('goods') -> where('id',$goods_id) -> value('is_shelves');
            $va = array('sku' => $s, 'state' => intval($is_shelves));
            $result[] = $va;
        }
        return $this -> create($result,'数据请求成功');
    }

    /**
     * @description: 图片接口
     * @param { 授权接口获取的access token } $token
     * @param { 商品编号，支持批量查询，以，分隔 } $sku
     * @param { 平台code标识 } $platformCode
     * @return {*} $result
     */
    public function images($token,$sku,$platformCode) {
        // 验证token与platformCode
        $auth = Auth2::check_token($token,$platformCode);
        if (!$auth['result']) {
            return $this -> create('', $auth['msg'], false);
        }
        $result = array();
        if (!is_array($sku)) {
            $sku = explode(',',$sku);
        }
        foreach ($sku as &$s) {
            // 获取商品
            $v = Db::name('goods_spec_base')->where('id',$s)->value('goods_id');
            $goods_id = intval($v);
            $params = [
                    'where' => [
                    'id' => $goods_id,
                    'is_delete_time' => 0,
                ],
                'is_photo' => true,
                'is_spec' => true,
                'is_content_app' => false,
            ];
            $res = GoodsService::GoodsList($params);
            $data = $res['data'];
            if(empty($data[0]) || $data[0]['is_delete_time'] != 0)
            {
                return $this -> create('','商品不存在或已删除', false);
            } else {
                $data = $data[0];
            }
            $photo = $data['photo'];
            $images = array();
            foreach ($photo as &$p) {
                $images[] = array('path' => $p['images'], 'order' => $p['sort']);
            }
            $va = array('sku' => $s, 'images' => $images);
            $result[] = $va;
        }
        return $this -> create($result,'数据请求成功');
    }

    /**
     * @description: 价格接口 返回协议优惠价格price，和商城售价mall_price。
     * @param { 授权接口获取的access token } $token
     * @param { 商品编号，支持批量查询，以，分隔 } $sku
     * @param { 平台code标识 } $platformCode
     * @return {*} $result
     */
    public function prices($token,$sku,$platformCode) {
        // 验证token与platformCode
        $auth = Auth2::check_token($token,$platformCode);
        if (!$auth['result']) {
            return $this -> create('', $auth['msg'], false);
        }
        $result = array();
        // 按','分割字符串
        if (!is_array($sku)) {
            $sku = explode(',',$sku);
        }
        foreach ($sku as &$s) {
            $v = Db::name('goods_spec_base')->field('original_price,price')->where('id',$s)->find();
            $va = array('sku' => $s, 'price' => $v['price'], 'mall_price' => $v['original_price']);
            $result[] = $va;
        }
        return $this -> create($result,'数据请求成功');
    }

    /**
     * @description: 库存接口
     * @param {*} $token
     * @param {*} $sku
     * @param {*} $area
     * @param {*} $platformCode
     * @return {*} $result
     */
    public function stocks($token,$sku,$area,$platformCode) {
        // 验证token与platformCode
        $auth = Auth2::check_token($token,$platformCode);
        if (!$auth['result']) {
            return $this -> create('', $auth['msg'], false);
        }
        $result = array();
        // 按','分割字符串
        if (!is_array($sku)) {
            $sku = explode(',',$sku);
        }
        foreach ($sku as &$s) {
            $i = Db::name('goods_spec_base') -> where('id', $s) -> value('inventory');
            $result[] = array('area' => $area, 'desc' => intval($i) > 0 ? '有货' : '无货', 'sku' => $s, 'num' => intval($i));
        }
        return $this -> create($result,'数据请求成功');
    }

    /**
     * @description: 获取消息接口
     * @param {*} $token
     * @param {*} $platformCode
     * @param {*} $type 
     * 消息类型： 
     * type=2 商品价格变更
     * type=4 代表商品上下架变更消息
     * type=6 代表添加、删除商品池内的商品
     * type=16 商品介绍及规格参数变更消息
     * type=5 订单已完成
     * type=10 代表订单取消，不区分取消原因
     * type=12 配送单生成成功消息 
     * type=1 订单拆分（非必须）
     * @return {*}
     */    
    public function getMessagePool($token,$platformCode,$type) {
        // 验证token与platformCode
        $auth = Auth2::check_token($token,$platformCode);
        if (!$auth['result']) {
            return $this -> create('', $auth['msg'], false);
        }
        switch ($type) {
            case 2:
                // whatever
                break;
            case 4:
                break;
            case 6:
                break;
            case 16:
                break;
            case 5:
                break;
            case 10:
                break;
            case 12:
                break;
            case 1:
                break;
            default:
                return $this -> create('', 'unknown type' ,false);
        }
    }

    public function certificates($token,$sku,$platformCode) {
        // 验证token与platformCode
        $auth = Auth2::check_token($token,$platformCode);
        if (!$auth['result']) {
            return $this -> create('', $auth['msg'], false);
        }
        $result = array();
        // 按','分割字符串
        if (!is_array($sku)) {
            $sku = explode(',',$sku);
        }
        foreach($sku as &$s) {
            $result[] = array(
                'sku'                               =>      $s,
                'save_energy_cert_no'               =>      '',
                'save_energy_cert_image'            =>      '',
                'save_energy_cert_indate'           =>      '',
                'environment_protect_cert_no'       =>      '',
                'environment_protect_cert_image'    =>      '',
                'environment_protect_cert_indate'   =>      '',
            );
        }
        return $this -> create($result);
    }
}

?>